当前位置: 首页 >文章 > JavaScript - 分号的使用
收藏
分享

JavaScript - 分号的使用

举报李游Leo李游Leo发布于 2021-04-261374阅读3点赞
JavaScript 并不是在所有换行处都填补分号...

JavaScript和其他编程语言一样都可以使用分号,其用法就是使用分号(;)将执行语句隔开。它更像是中文中的句号,告诉每一句话的结束,分号在程序中则是象征着每一条程序代码的结束。当我们使用分号对代码进行分隔之后,对代码的整体的可读性和整洁性是非常重要的,如果不写分号,上一条语句的结束就成了下一条语句的开始,反之亦然。但是 JavaScript 中的分号是可选的,JavaScript 并不严格要求使用分号。 当有一个需要分号的地方时,JavaScript 会在解析时自动添加。执行此操作的过程称为自动插入分号。了解必须使用分号的规则非常重要,以避免编写产生错误的代码,因为它们的行为可能会与您预期的不同。



JavaScript 自动插入分号的规则

JavaScript 并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。在解析源代码期间,要是发现以下特定的情况时,JavaScript 解析器将会自动添加分号 :

当下一行代码开始会破坏当前一行的代码时( JavaScript 代码可以写在多行中 )。如果一条语句以(、[、/、+或-开始,那么它极有可能和前面一条语句合在一起解析。

当下一行以 } 开头时,或者以 } 结束闭合当前代码块时。

1.当解析到达源代码文件的末尾时。

2.当前行 return 语句后面紧跟着换行时。

3.当前行 break 语句后面紧跟着换行时。

4.当前行 throw 语句后面紧跟着换行时。

5.当前行 continue 语句后面紧跟着换行时。


考虑如下代码,因为两条语句用两行书写,第一个分号是可以省略掉的:


如果按照如下格式去书写,那么第一个分号则不能省略掉:

值得注意的是,JavaScript 就像我上述描述的一样,JavaScript只有在自身无法解析代码的时候,才会自动填补分号。例如:


JavaScript会自动填补分号,将其解析为:

我们可以通过规则简单来分析一下最后的解析结果,JavaScript给第一行末尾处添加了分号,试想一下如果没有分号,JavaScript就无法解析代码var c f。第二个f虽然可以单独当做一条语句“f;”,但是JavaScript并没有给第二行代码结尾处添加分号,因为它可以和第三行和第四行组成“f =10;”。

不过呢,因为这些分隔的规则会导致一些意想不到的状况,例如:

这里运行之后,会引发代码异常“TypeError: b is not a function”,JavaScripr 会爆出一个b不是个函数的错误,然而这段代码的本意并不是这样,那么这个是怎么出现问题了呢?

其实是因为第四行圆括号和第三行的b组成了一个函数调用,所以JavaScript 会把这段代码看做为:

通过以上代码,我们可以看到第三行和第四行组成之后b组成了一个函数,造成后面的错误,为了避免以上的错误,我们必须手动填写行尾的显示分号。

当然通过上述的规则,我们也可以这样灵活运用分号,例如:

在第四行的前面的分号保障的b与后面括号的分隔,这样 JavaScript 就可以按照我们的本意去执行语句了。也就是说分号可以灵活的在语句之前放入,不一定非要在语句之后放入。

不过在规则中我们也说明了,如果涉及到 return、break、throw、continue 语句时,JavaScript则会自动在后面填补分号,例如在某函数中:

JavaScript会自动把解析成成:

而我们的本意应该是这样:

所以也就是说,在上述这些特殊语句中,表达式之间建议不要使用换行,以免出现不必要的问题。如果添加了换行,程序则只有在在极特殊的情况下会出现报错,所以在调试或者可读方面也会非常的不方便。

还有一些特殊的运算符,比如“++”和“--”运算符,这些运算符可以作为表达式的前缀或者后缀,JavaScript在分隔的默认解析中都是以代码的前缀进行解析操作,如果想以后缀显示,需要让运算符和表达式在同一行显示,例如:



那么这行代码会默认解析成“a;++b;”,则不是“a++;b”,想获得后者,就需要让其运算符和表达式在一行显示,例如:

在此时,JavaScript 就会分隔解析成“a++;b;”。




本文原创,未经作者允许不可转载!

更多内容,欢迎关注作者微信公众号:李游leo老师在线课堂!


0条评论
别默默看啦~登录/注册一起参与讨论吧~

暂无评论

请选择举报理由

违反法律法规

侵犯个人权益

有害网站环境

更多训练营>>

为你推荐 · 训练营(全勤打卡报名费全额返累计全额返用户133,673人)

电商海报设计训练营
距离开班仅剩7天73人已报名
【5月】零基础手绘插画训练营
距离开班仅剩7天66人已报名
【5月】零基础动态表情包创作训练营
距离开班仅剩24天16人已报名
猜你喜欢
特惠
充值
7折购
今日还在继续学习的你,太棒了!
7
折扣券可用于
年费无限VIP
立 即
使 用
此活动优惠不可与其他活动叠加使用
有效期:000000
消息
登录即可查看消息记录
建议
意见
官方
客服
在线咨询客服热线

您可以与在线客服进行沟通获得帮助

工作日:9:00~22:00节假日:9:00~18:00

联系在线客服

您可以电话联系客服进行沟通获得帮助

工作日:9:30~18:30

400-862-9191
虎课
积分
免费学习89000+个教程!
配套素材、源文件一键下载!
昨日学员已学习了36,901
并提交了212份作业!
登录后立即学习!
loading
微信扫码关注即可登录
您需要同意协议才可以进行登录
登录虎课网,每天免费学课程全站 89000+ 视频会员教程 | 每日可免费学 1
为确保账户信息安全
请先进行真实姓名验证后进行充值付款
立即验证